home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Tools 3
/
Amiga Tools 3.iso
/
programming
/
colpectius1
/
text_editor.amos
/
text_editor.amosSourceCode
Wrap
AMOS Source Code
|
1993-08-18
|
8KB
|
360 lines
' A text editor
' ~~~~~~~~~~~~~
' by Ben Wyatt, bwyatt@paston.co.uk
' A text editor with very nasty colours and many options which just don't
' work, and is limited to 200 lines (you can change this, look below)
' Since I did this, I've done a proportional font text editor which is
' much better, but it's not finished (yet)
Set Buffer 15
LINES=200 : L=0 : YPOS=0
Dim LINE$(LINES)
Global LINES,TSCRHEIGHT,L,YPOS,FILENAME$
Global LINE$()
_TEXTEDITOR[0]
Edit
Procedure _TEXTEDITOR[SCR]
' Scr=Spare screen to be used
Screen Open SCR,640,256,8,Hires
Screen Display 0,128,37,640,Screen Height
Palette $0,$40F,$A0F,,$FFF
Cdown
Cls 1
Cls 2,0,0 To 640,8
Cls 2,624,8 To 640,Screen Height
TSCRHEIGHT=Screen Height/8-1
Scroll Off
_LMOUSE
Def Scroll 1,0,8 To 624,Screen Height,0,8
Def Scroll 2,0,16 To 624,Screen Height,0,-8
Paper 1 : Pen 4
Menu$(1)=" Project "
Menu$(1,1)=" Load "
Menu$(1,2)=" Save "
Menu$(1,3)=" Save As "
Menu$(1,4)=" " : Menu Inactive(1,4)
Menu$(1,5)=" Print "
Menu$(1,7)=" " : Menu Inactive(1,7)
Menu$(1,20)=" Quit "
Menu$(2)=" Block "
Menu$(2,1)=" Select All "
Menu$(2,3)=" " : Menu Inactive(2,3)
Menu$(2,4)=" Copy "
Menu$(2,5)=" Cut "
Menu$(2,6)=" Delete "
Menu$(3)=" Search "
Menu$(3,1)=" Search New "
Menu$(3,2)=" Search Next "
Menu$(3,3)=" Search Previous "
Menu$(3,5)=" " : Menu Inactive(3,5)
Menu$(3,6)=" Replace New "
Menu$(3,7)=" Replace Next "
Menu$(3,8)=" Replace Previous "
Menu On
_TEXTUPDATE[0]
_CURSPOS
Repeat
If Choice
C1=Choice(1)
C2=Choice(2)
Menu Off
If C1=1
If C2=1
_LOAD[Fsel$("","","Select a Text file to Load","")]
_TEXTUPDATE[YPOS]
End If
If C2=2
_SAVE[FILENAME$]
_TEXTUPDATE[YPOS]
End If
If C2=3
FILENAME$="" : _SAVE[FILENAME$]
_TEXTUPDATE[YPOS]
End If
End If
If C1=2
End If
If C1=3
End If
Menu On
Clear Key
End If
X=X Screen(X Mouse) : Y=Y Screen(Y Mouse) : MC=Mouse Click : MK=Mouse Key
If MC=1 and Y>7
XC=X/8 : YC=Y/8
L=YPOS+YC-1
Locate Min(XC,Len(LINE$(L))),YC
End If
I$=Inkey$ : S=Scancode : A=Asc(I$) : SS=Scanshift
If A>0 or S>0 : _CHECK[I$,A,S,SS] : End If
Until C1=1 and C2=20
End Proc
Procedure _TEXTUPDATE[ST]
' St=Start of text to print
Cls 1,0,8 To 624,Screen Height
X=X Curs : Y=Y Curs
Paper 1 : Pen 4
For YPL=ST To ST+TSCRHEIGHT-1
Locate 0,YPL-ST+1
Print LINE$(YPL)
Next YPL
Locate X,Y
End Proc
Procedure _LOAD[FILE$]
If Exist(FILE$)=0 and FILE$<>""
_ERROR["File Doesn't Exist",7] : FILE$=""
End If
If FILE$<>""
Reserve As Chip Data 12, Extension_18_0294(FILE$)
_PRINTFILE[FILE$] : Bload FILE$,12
PL=Start(12)
For N=0 To LINES
LINE$(N)=""
If PL<Start(12)+Length(12)
LINE$(N)= Extension_18_013A(PL,78,Chr$(10))
Add PL,Len(LINE$(N))+1
End If
Next N
Erase 12
L=0 : YPOS=0
End If
End Proc
Procedure _SAVE[FILENAME$]
X=X Curs : Y=Y Curs
If FILENAME$=""
FILENAME$=Fsel$("","","Input Filename to Save Under","")
End If
Reserve As Chip Data 12,78*LINES
PL=Start(12)
For N=0 To LINES
Extension_18_015A PL,LINE$(N)+Chr$(10)
Add PL,Len(LINE$(N))+1
Next N
Bsave FILENAME$,Start(12) To PL
Erase 12
_PRINTFILE[FILENAME$]
Locate X,Y
End Proc
Procedure _ERROR[MESS$,SCR]
S=Screen
Screen Open SCR,640,8,2,Hires
Flash Off : Curs Off : Cls 0
Centre MESS$
Repeat : Until Mouse Key>0
Screen Close SCR
Screen S
End Proc
Procedure _LMOUSE
Limit Mouse 130,39 To 128+318,37+Screen Height-2
End Proc
Procedure _CHECK[I$,A,S,SS]
X=X Curs
' Normal Key
If A>31 and Len(LINE$(L))<77
A1$=Left$(LINE$(L),X)
A2$=Right$(LINE$(L),Len(LINE$(L))-X)
LINE$(L)=A1$+I$+A2$
Inc X
Locate 0,Y Curs
Print LINE$(L);
Locate X,Y Curs
End If
' Delete
If A=8 and(L>0 or X>0)
If X=0
A1$=LINE$(L-1)
A2$=LINE$(L)
If Len(A1$+A2$)<=77
For N=L+1 To LINES
LINE$(N-1)=LINE$(N)
Next N
LINE$(LINES)=""
LINE$(L-1)=A1$+A2$
Dec L
If Y Curs=1
Curs Off : Wait Vbl
Scroll 1 : Dec YPOS
Cls 1,0,8 To 624,16
Locate 0,1 : Print LINE$(L);
Curs On
Else Cup
End If
Y=Y Curs
Def Scroll 3,0,Y*8+8 To 624,Screen Height,0,-8
Scroll 3
Locate 0,Y : Print LINE$(L);
Cls 1,0,248 To 624,256
Locate 0,TSCRHEIGHT : Print LINE$(YPOS+TSCRHEIGHT-1);
Locate Len(A1$),Y
Clear Key
End If
Else
A1$=Left$(LINE$(L),X-1)
A2$=Right$(LINE$(L),Len(LINE$(L))-X)
LINE$(L)=A1$+A2$
Dec X
Locate 0,Y Curs
Print LINE$(L)+" ";
Locate X,Y Curs
End If
End If
' Backspace
If S=70 and X<Len(LINE$(L))
A1$=Left$(LINE$(L),X)
A2$=Right$(LINE$(L),Len(LINE$(L))-X-1)
LINE$(L)=A1$+A2$
Locate 0,Y Curs
Print LINE$(L)+" ";
Locate X,Y Curs
End If
' Return
If A=13 and LINE$(LINES)=""
A1$=Left$(LINE$(L),X)
A2$=Right$(LINE$(L),Len(LINE$(L))-X)
LINE$(L)=A1$
For N=LINES-1 To L+1 Step -1
LINE$(N+1)=LINE$(N)
Next N
If Y Curs=TSCRHEIGHT
Curs Off : Wait Vbl
Scroll 2 : Inc YPOS
Cls 1,0,Screen Height-8 To 624,Screen Height
Locate 0,TSCRHEIGHT : Print LINE$(L);
Cup : Curs On
End If
Inc L
MV=0
If Y Curs<TSCRHEIGHT : Locate 0,Y Curs+1
Else Inc YPOS
End If
LINE$(L)=A2$
Y=Y Curs
Def Scroll 3,0,Y*8 To 624,Screen Height,0,8
Curs Off : Wait Vbl
Scroll 3
Cls 1,0,Y*8-8 To 624,Y*8+8
Locate 0,Y-1 : Print LINE$(L-1);
Locate 0,Y : Print LINE$(L);
If Y<>TSCRHEIGHT : Locate 0,Y+1 : Print LINE$(L+1); : End If
Locate 0,Y
Curs On
Clear Key
End If
' Cursor left
If A=29 and X>0
If SS>0 : Locate 0,Y Curs
Else Cleft
End If
End If
' Cursor right
If A=28 and X<Len(LINE$(L))
If SS>0 : Locate Len(LINE$(L)),Y Curs
Else Cright
End If
End If
' Cursor up
If A=30 and L>0
Dec L
If Y Curs=1
Curs Off : Wait Vbl
Scroll 1 : Dec YPOS
Cls 1,0,8 To 624,16
Locate 0,1 : Print LINE$(L);
Curs On
Else Cup
End If
If X>Len(LINE$(L)) : X=Len(LINE$(L)) : End If
Locate X,Y Curs
Clear Key
End If
' Cursor down
If A=31 and L<LINES
Inc L
If Y Curs=TSCRHEIGHT
Curs Off : Wait Vbl
Scroll 2 : Inc YPOS
Cls 1,0,Screen Height-8 To 624,Screen Height
Locate 0,TSCRHEIGHT : Print LINE$(L);
Curs On
Else Cdown
End If
If X>Len(LINE$(L)) : X=Len(LINE$(L)) : End If
Locate X,Y Curs
Clear Key
End If
_CURSPOS
End Proc
Procedure _CURSPOS
X=X Curs : Y=Y Curs
Locate 70,0 : Paper 2
Print Using "X ## ";X;
Print Using "Y ##";Y
Locate X,Y : Paper 1
End Proc
Procedure _PRINTFILE[FILE$]
Def Fn SHORTEN$(F$)=Right$(Right$(F$,Len(F$)- Extension_18_0086(F$,"/")),Len(Right$(F$,Len(F$)- Extension_18_0086(F$,":"))))
Home : Paper 2 : Pen 4
If FILE$<>"" : Print Fn SHORTEN$(FILE$)
Else Print "New File"
End If
End Proc